// 对axios进行二次封装
import axios from 'axios'
import { removeToken, getToken } from '@/utils/token'
import router from '@/router'
import { Notify } from 'vant'
/* 技能提升：
使用ajax发送请求
*/
// import $ from 'jquery'
axios.defaults.baseURL = 'http://geek.itheima.net'
// axios.defaults.baseURL = 'http://toutiao.itheima.net'
axios.defaults.timeout = 8000
// 拦截器统一判断http状态码
// 拦截器改请求头/参数格式...

export default ({ url, method, params, data, headers }) =>
  axios({
    url,
    data,
    params,
    method,
    headers
  })

/* {
  if (method.toUppercase() === 'GET') {
    // 自己把params参数拼接在url?后面
  }
  $.ajax({
    url: url,
    data: data, //  没有params
    type: method,
    headers
  })
} */
/*
$.ajax({
    url: '请求地址',
    data: {}, //  没有params
    type: '请求方式'
})
*/
// export default axios

// 添加拦截器
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 发起请求的时候自动带上请求头
  config.headers.Authorization = `Bearer ${getToken()}`
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
// http状态码: 2xx / 3xx开头
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, function (error) { // 4xx/5xx http状态报错
  if (error.response.status === 401) {
    Notify({
      type: 'danger',
      message: '身份认证过期，请重新登录'
    })
    // 对响应错误做点什么
    console.dir(error)
    // 身份认证失败的时候移除token
    removeToken()
    // 跳转到登录页-切换路由
    router.replace('/login')
  }

  // 对相应错误做点什么
  return Promise.reject(error)
})
